import type {
  ExtractFormStringifyFromObject,
  FormItemConfigList,
  FormMainProps,
} from "@/components/form";
import type { FormProps } from "element-plus";

/** 详情页类型 */
export type DetailType = "add" | "edit" | "read";

export interface DetailModalProps<
  /** 表单标准结构模型 */
  PO extends Record<string, any>,
  /** 表单需转换的部分结构模型 */
  SO extends Record<string, any>,
> {
  /** 表单数据 */
  data: PO;
  /** 表单配置 */
  list: FormItemConfigList<PO, SO>;
  /** 表单类型 */
  type: DetailType;
  /**
   * 标题
   * 最终表现为：新增[标题]、编辑[标题]
   */
  subTitle?: string;
  show: boolean;
  /** 新增api */
  addApi?: (data: ExtractFormStringifyFromObject<PO, SO>) => Promise<any>;
  /** 编辑api */
  editApi?: (data: ExtractFormStringifyFromObject<PO, SO>) => Promise<any>;
  /** 弹窗宽度 */
  modalWidth?: number | string;
  /** 表单整体布局 */
  formLayout?: FormMainProps<PO, SO>["layout"];
  /** elForm其他属性 */
  formProps?: Partial<FormProps>;
}
